/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.knolle.proveedorServicios;


import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
import org.marcelo.agro.entidades.*;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.marcelo.agro.core.DynamicLookup;
import org.marcelo.agro.core.api.IActividades;
import org.marcelo.agro.entidades.eventos.ActividadesEvent;
import org.openide.util.lookup.ServiceProvider;

/**
 * Tiene dependencias de la clase Notificaciones para mostrar al usuario los mensajes de error
 * que va arrojando Hibernate al realizar las consultas
 * @author marcelo
 * Implementacion de IActividades tiene la dependencia a Hibernate para realizar las consultas, y se registra a travez de la anotacion
 * ServiceProvider,
 * @since 1.0
 */

@ServiceProvider (service = IActividades.class )
public class ActividadesDatabase extends DefaultDatabase<Actividades> implements IActividades{

       
    @Override
    public List<Actividades> getActividades(LotesPorCampana lpc)  {
//        try {
            return getFilteredObjects(Actividades.class, Arrays.asList(Restrictions.eq("campanas", lpc.getCampanas()), Restrictions.eq("lotes", lpc.getLotes()) ), Order.asc("fecha"));
//           return actividadesList;
//        }
//        catch (Exception e) {
//            Notificaciones.notificar(MENSAJE_ERROR_CONSULTA, e.toString());
//        }
//        return new ArrayList<Actividades>();
    }

    
    @Override
    public List<Productos> getProductos() {
        throw new UnsupportedOperationException("Not supported yet.");
    }


    @Override
    public Boolean esUnico(Actividades actividades) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public List<Actividades> find(Actividades object) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public List<Actividades> getAll()  {
        return super.getAll(Actividades.class);
    }

   

    @Override
    public List<Actividades> getActividades(TipoActividad tipoActividad, TipoProducto tipoProducto) {
        
        
            return getFilteredObjects(
                        Actividades.class, 
                        Arrays.asList(Restrictions.eq("tipoActividad", tipoActividad), 
                        Restrictions.eq("tipoProducto", tipoProducto) ), 
                        Order.asc(DEFAULT_ORDEN));
        
        
    }

    @Override
    public Boolean esUnico(String nombre)  {
        throw new UnsupportedOperationException("Operacion no implementada");
    }

    @Override
    public List<Actividades> getActividades(Campanas campania)  {
//        try{
           return  getFilteredObjects(Actividades.class, Arrays.asList(Restrictions.eq("campanas", campania)), Order.asc("fecha"));
//        }
//        catch(Exception e){
//            Notificaciones.notificar(MENSAJE_ERROR_CONSULTA, e.toString());
//        }
//        return new ArrayList<Actividades>();
        
    }

    @Override
    public void delete(Actividades object) throws Exception {
        Boolean result = super.delete(object);
        ActividadesEvent ae = new ActividadesEvent(ActividadesEvent.TIPOS_EVENTO.DELETED);
        DynamicLookup.getDefault().add(ae);
        DynamicLookup.getDefault().remove(ae);
        result = !result;
    }

    @Override
    public void saveOrUpdate(Actividades object) throws Exception {
        //Si id es null o cero es nuevo, sino es actualizacion
        ActividadesEvent ae ;
        if ( object.getId() != null &&  object.getId() > 0 ) {
            ae = new  ActividadesEvent(ActividadesEvent.TIPOS_EVENTO.EDITED);
        }
        else {
            ae = new ActividadesEvent(ActividadesEvent.TIPOS_EVENTO.CREATED);
        }
        
        super.saveOrUpdate(object);
        
        DynamicLookup.getDefault().add(ae);
        DynamicLookup.getDefault().remove(ae);
    }

    @Override
    public void saveOrUpdates(Object[] objects) throws Exception{
        
        super.saveOrUpdates(objects);
        //No hay actualizaciones batch solo creaciones entonces envio evento CREATED
        ActividadesEvent ae = new ActividadesEvent(ActividadesEvent.TIPOS_EVENTO.CREATED);
        DynamicLookup.getDefault().add(ae);
        DynamicLookup.getDefault().remove(ae);
    }

    @Override
    public BigDecimal getSuperficieMax() {
        return SUPERFICIE_MAX;
    }

    @Override
    public BigDecimal getDosisMax() {
        return DOSIS_MAX;
    }

    @Override
    public BigDecimal getPrecioMax() {
        return PRECIO_MAX;
    }
    
    
    
    
    
    
}
